﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace SpringStudio.Common
{
    public static class StringHelper
    {
        /// <summary>
        /// 截取固定字节长度的字符串（兼容汉字，一个汉字长度为2个字节）
        /// </summary>
        /// <param name="str">字符串</param>
        /// <param name="length">规定的字节长度</param>
        /// <returns>截取后的字符串</returns>
        public static string InterceptString(string str, int length)
        {
            str = str.Trim().Replace("\r\n", " ");  // 清除字符串中的换行

            StringBuilder rtn = new StringBuilder();  // 定义返回值

            if (Encoding.Default.GetByteCount(str) <= length)  // 如果字节数小于参数length，则直接返回该值
            {
                rtn.Append(str);
            }
            else
            {
                length = length - 2;  // 减两个字节，作为省略号
                int count = 0;  // 字节数递增变量
                char[] arr = str.ToCharArray();  // 将字符串拆分为字符数组

                for (int i = 0; i < arr.Length; i++)
                {
                    if ((int)arr[i] > 0 && (int)arr[i] < 127)  // 是否半角字符
                    {
                        count += 1;  // 字节数加1
                    }
                    else
                    {
                        count += 2;  // 字节数加2
                    }

                    if (count <= length)
                    {
                        rtn.Append(arr[i]);  // 将字符累加到返回值
                    }
                    else
                    {
                        break;
                    }
                }

                rtn.Append("…");
            }

            return rtn.ToString();
        }

        /// <summary>
        /// 简单的HTML格式化
        /// </summary>
        /// <param name="str">字符串</param>
        public static string MakeHtml(string str)
        {
            str = str.Replace("\r\n", "<br>");
            str = str.Replace(" ", "&nbsp;");

            return str;
        }

        /// <summary>
        /// 清除文本中的Html标记及替换符
        /// </summary>
        /// <param name="html">Html文本</param>
        /// <returns>纯文本</returns>
        public static string ClearHtml(string html)
        {
            string text = html;
            text = Regex.Replace(text, "<[^>]+>", "");  // 过滤标签
            text = Regex.Replace(text, "&[^;]+;", "");  // 过滤替换符
            text = text.Replace("\r\n", "");  // 过滤换行符
            text = text.Replace(" ", "");  // 过滤空格
            return text;
        }
    }
}
